Jump to content

Programming Challenge Week #0 : Miljons


AndrisBB
 Share

Recommended Posts

Taka sis ir 2015 gada "nulltas" nedelas uzdevums, tad izvelejos to saistiba ar nullem.

 

Uzdevums

.....................................

1 000 000 ir liels un apals skaitlis, uzdevums ir atrast divus naturalus skaitlus a un b, kuru reizinajums ir tiesi viens miljons.

Sakara ar to ka tema ir nulles, tad neviens no reizinatajiem nedrikst saturet 0.

 

Noteikumi

...................................

Drikst izmantot jebkuru programmesanas valodu

 

 

 

 

Link to comment
Share on other sites

1 000 000 ir liels un apals skaitlis

 

 Apaļš tas ir tikai tad, ja nulles ir sinonīms bumbām. Liels, ja tas ir Eiro, vai sliktākajā gadījumā $.

 

p.s. vins no reizinātājiem lielāks par 1000, otrs mazāks. Tālāk ar pielasīšanas (iterācijas, laikam) metodi. Neesmu programmētājs, karogs Jūsu rokās.

Labots - ggg97
Link to comment
Share on other sites

Plus vēl varu piemetināt @@vvv atbildei, ka citu variantu nav, jo nevienam no abiem skaitļiem pirmreizinātājos nedrīkst būt vienlaicīgi gan 2, gan 5 - citādi dalīsies ar 10 un būs galā nulle.

Man labāks uzdevums (tāds klasisks):

 

Uztaisīt programmu, kura:

  • Uz ekrāna izvada tikai un vienīgi "2015" (ne vairāk, ne mazāk).
  • Ja šai programmai nomaina jebkuru vienu simbolu (pieliek/atņem/izmaina), tad tā joprojām izvada tikai un vienīgi "2015". (Šeit jāpiezīmē, ka simbols tiks nomainīts tikai tādā veidā, kas netraucēs programmu kompilēt/interpretēt)
Labots - Vilx-
Link to comment
Share on other sites

Japiekrit ka skaitli soreiz izvelejos nevisai veiksmigu, parak maz dazadu reizinataju, ka ari tas ir pietiekosi mazs, lai brute force butu effektivs.

Nu nekas, japalielina grutibas pakape

Link to comment
Share on other sites

 Neesmu programmētājs. Programmēju tikai, cik uz saviem programmējamiem kalkulatoriem. Biedra Vilx uzdevumu taisītu tā - ta vienalga kāda programma, lai rezultātā sanāk 2015, a pieliek vienā vietā, kaut pirms rezultāta, "abs". Nezinu tik, vai tas "abs" ir uztverams kā viens simbols, ja nē, tad mans variants neder.

 AndrisBB, ļoti veiksmīgs piemērs, katrā ziņā interesants. Ja turpmāk liksi ko baigi sarežģītu un specifisku, būs interese mazāka par taviem uzdevumiem.

Link to comment
Share on other sites

 

 

tas ir pietiekosi mazs, lai brute force butu effektivs

Kā atrisināt tavu uzdevumu bez brute force? Padalies.

  • Patīk 1
Link to comment
Share on other sites

Skaties, Tu devi programmu, kurai vienmēr vajadzētu izvadīt "2015" - pat tad, ja nomaina 1 simbolu:

 

 

x:=(-2015)
print abs(x)

 

Es saku, ka tas neder - ja nomaina simbolu "5" pret "4", tad programma izvadīs "2014".

Link to comment
Share on other sites

Kā atrisināt tavu uzdevumu bez brute force? Padalies.

 

galvā nāk cikls ciklā, palielini vienu reizinātāju līdz 1000000 ar soli +1, un čeko vai reizinājums ir 1 000 000, un atbilst, kad sasniegts otrā cikla gals, tad palielinam otru reizinātāju par +1 un atkārtojam iekšējo ciklu un tā līdz atrodam vajadzīgos reizinātājus. pārlasijos...

 

@@Vilx-

 

$x = '2015';

if ($x == '2015') {

  echo $x;

} else {

  echo '2015';

}

 

kaut kā tā?

Labots - Guest
Link to comment
Share on other sites

 kroop, biedrs eddyboi jau iedeva piemēru. Paskaidrojiet man, vai es pareizi saprotu jēdzienu "brute force" - tas ir atrisināt uzdevumu izejot cauri visiem iespējamiem variantiem, tas ir tieši tas, ko programmētāji dara, jo skaitļojamo mašīnu resurss ir milzīgs.

 

 

Uztaisīt programmu, kura: Uz ekrāna izvada tikai un vienīgi "2015" (ne vairāk, ne mazāk). Ja šai programmai nomaina vienu simbolu (pieliek/atņem/izmaina), tad tā joprojām izvada tikai un vienīgi "2015". (Šeit jāpiezīmē, ka simbols tiks nomainīts tikai tādā veidā, kas netraucēs programmu kompilēt/interpretēt)

 Vilx-, tev bija uzdevums. Kas manā piemērā neatbilst tava uzdevuma nosacījumiem? Ja tu gribēji, lai maina "2015" uz "2014", tad vajadzēja uzdevumā rakstīt "Ja šai programmai nomaina vienu simbolu skaitlī "2015"", nevis kā tu uzrakstīji - vispār, turklāt "pieliek/atņem/izmaina". Nemaini uzdevuma nosacījumus vai arī definē uzdevumu konkrētāk.


Varbūt tu domāji, nomainīt da jebkuru simbolu, kuru ne maini, vienmēr galā "2015"? Tad vajadzēja uzdevumā rakstīt - "Ja šai programmai nomaina vienu, jebkuru simbolu.


Tad jau biedra ieleja piemērs arī neder, jo var nomainīt viņa programmā "2015" uz "2014".


Vispār Vilx- iedeva baigi interesanto piemēru. Ar lielu nepacietību gaidīšu, kad kāds uzrakstīs pareizo atbildi.

Labots - vvv
Link to comment
Share on other sites

Atvainojos, ka esmu nepilnīgi definējis uzdevumu. Jā, doma bija - jebkuru vienu simbolu nomainot, programmai joprojām jāizvada "2015". Ielejas piemērs arī neder, jā.

Link to comment
Share on other sites

Jāiet gulēt. Kas ienāca prātā. Nezinu, vai ir tāda funkcija programmēšanas valodās, kas uzskaita programmas rindiņu skaitu. Jāuzraksta programma ar 2015 rindiņām, pēc tam galā jāizvada programmas rindiņu skaits. :) Varēs mainīt jebkuru vienu simbolu pa visu programmu acis pārgriezis, galā būs tikai, vienīgi un nemainīgi "2015". :sarkasms:

Link to comment
Share on other sites

vai ta kroop ideja nav derīga valodās, kur

  • nevar mainīt "string zīmi"  un
  • print arity ir 1

 

common lisp

 

(let ((xx "2015"))
  (if (equal "2015" xx)
    (print xx)
    (print "2015")))
Labots - MarisO
Link to comment
Share on other sites

Tomēr nederēs, jo atnāks Vilx- un pēdējā rindiņā, kur komanda izvadīt rindiņu skaitu, pieliks mīnus zīmi. :mad:


MarisO, tavā piemērā Vilx- samainīs "2015" uz "2014", neder tavs piemērs.

Link to comment
Share on other sites

 

 

MarisO, tavā piemērā Vilx- samainīs "2015" uz "2014
 

 

var tur mainīt  jebkuru no  "2015",  

mīnus zīmi pielikt nevar,  jo LISPā tam vajag 3 simbolus   :)

Link to comment
Share on other sites

Kā atrisināt tavu uzdevumu bez brute force? Padalies.

 

Domaju kko lidzigu ka to risinatu uz papira sadalot pirmreizinatajos:

 

1. Dali to 1kk ar 2 kamer dalas

2. Pectam dali ar pirmskaitliem, kamer nonac lidz 1

 

Vai tas butu atrak ka izietcauri visiem variantiem nezinu

 

.................

 

Vilx- uzdevumu gan nespeju saprast, varbut tas vairak attapibas uzdevums un jaizdruka sodienas gads, tik programma japalaiz pec jaunagada :D

Labots - AndrisBB
Link to comment
Share on other sites

ielejas piemērs neder, jo

 

tad tā joprojām izvada tikai un vienīgi "2015"
, tev izvadīs divus, vienu derīgo, vienu pamainīto.

 

 

varbut tas vairak attapibas uzdevums un jaizdruka sodienas gads, tik programma japalaiz pec jaunagada :D

šitais arī ienāca prātā, bet googlē atradu, ka gada izvadīšanai, kaut kā jaraksta "Y", ko biedrs Vilx- vieglu roku izmainīs uz "M" vai "D".


Vo Vilx- uzdevumu iedeva! Nemaz vairs miegs nenāk, gaidu atbildi. Programmētāji, saņemieties!

Link to comment
Share on other sites

Jā, tas ir atjautības uzdevums, un man arī šķiet, ka tas būs vienlīdz grūts kā iesācējiem, tā ekspertiem. :)

 

Par Common Lisp neko daudz nezinu, diemžēl. Iespējams, ka MarisO variants strādā. MarisO - pameklē pats, vai nevari atrast kādu viltību, kā piespiest izdrukāt ko citu. :)

 

Taču nemetiet plinti krūmos, pārējie - izdomājiet risinājumus savās mīļākajās programmēšanas valodās! :)

Pievienots: OK, moš es kļūdos, bet vai gadījumā nevar šitā:

(;if (equal "2015" xx)
Cik paskatījos piemērus netā, tad, pēc manas saprašanas, tam vajadzētu izkomentēt to ifu, kā rezultātā izpildītos ABI printi. Bet tas tā, uz ātru roku nepazīstot valodu. :) Labots - Vilx-
Link to comment
Share on other sites

Vai nav tā, ka jāuzraksta ar vārdiem "divi tūkstoši piecpadsmit", un piemeklēt komandas, kas to pārvērš ciparos. Pa vienam simbolam mainot, neko nesabojāsi, vai arī sabojāsi, bet

 

(Šeit jāpiezīmē, ka simbols tiks nomainīts tikai tādā veidā, kas netraucēs programmu kompilēt/interpretēt)
, kaut kā tā?

https://www.easycalculation.com/convert-text-to-number.php


:)

Link to comment
Share on other sites

jā var tur ielikt semikolu,  lai drukā 2015   2 reizes

(let ((xx "2015"))
  (if ;(equal "2015" xx)
    (print xx)
    (print "2015")))

bet šādi uzrakstot gan laikam vairs nē,   jo iekavām jābūt balansā 

(let ((xx "2015"))
  (if (equal "2015" 
       xx)
    (print    
     xx)
    (print "2015"))) 
Link to comment
Share on other sites

MarisO ideju sapratu, gan jau ka strādā.

Bet izskatās biedram Vilx- kas cits aiz ādas. Kad būs viņa atbilde, jābūt interesanti.

Link to comment
Share on other sites

Hm? Manis paša atbilde? Umm... pirmkārt, šī nav mana oriģināla ideja (tā kaut kad senos laikos esot bijusi Ugāles kausā); otrkārt, es šo jau iepriekš esmu uzdevis vienā ārzemju interneta forumā, kur dabūju daudzas un dažādas atbildes dažādās valodās. Linku iedošu vēlāk, citādi cilvēkiem būs kārdinājums tur skatīties, un tas vairs nebūs interesanti. Padarbojieties vien paši - šeit nav "pareizās atbildes" un uzvarētāja - tas ir tīri jautrībai. :)

ja pieņēmam, ka Vilx- simbolus mainīs, nevis dzēsīs utt

Sorry, var arī vienu simbolu pievienot vai vienu simbolu nodzēst.

Ja šai programmai nomaina jebkuru vienu simbolu (pieliek/atņem/izmaina)

Lai arī no Haskella tikai nosaukumu zinu, tomēr tajā linkā var forši paspēlēties. Pamēģināju ielikt vienu nevainīgu atstarpīti, un skat - jau izdrukā 2115! :) Gan nav ne mazākās nojausmas, kāpēc. :D

main = print $ ["hs", " ", "=", "power"] >>= show . length

Pievienots:Ā, izpīpēju, ko tas dara. Izdrukā 4 stringu garumus. Nu, jā - kā sacīt saka - nice try. ;)

Labots - Vilx-
Link to comment
Share on other sites

Леший

Tā, nu it kā šitā: https://eval.in/237909

main = print . head $ filter (==2015) [5*13*31] ++ [2015]

haskell kods drukā katra string garumu

Ja precizēt, tad tas izmanto faktu, ka >>= uz listēm ir

list >>= func == concat (map func list)

Attiecīgi, sākumā katra rinda tiks padota funkcijai show . length (dabūt garumu un pārkonvertēt par String) un tad rezultējošās rindas tiek sakonkatenotas, sanāk rinda "2015".

Labots - Леший
  • Patīk 1
Link to comment
Share on other sites

Vai tad gandrīz jebkurā valodā nevar sabojāt nomainot/izdzēšot/pievienojot vienu simbolu "print" vārdā uz kaut ko citu, tādējādi sabojājot programmu un nekas nestrādās?

Link to comment
Share on other sites

 

 

... (Šeit jāpiezīmē, ka simbols tiks nomainīts tikai tādā veidā, kas netraucēs programmu kompilēt/interpretēt)
 
Link to comment
Share on other sites

 Patika MarisO piemērā kā viņš izvēlējās mainīgo no diviem simboliem. Viltīgi, jo ja būtu mainīgais no viena simbola, varētu to vienu simbolu aiz print nomainīt, piemēram, uz "1", un izvadītos galā "1" nevis "2015". A tā, nekā. Mainot tajā xx tikai vienu simbolu, programma vienkārši nestrādā.

 Gan jau arī Ļešij piemērs ir elegants, tikai nesaprotu tur nekā - cits līmenis. :)

Link to comment
Share on other sites

Vai šo php gabalu var "piemānīt"?

function happy(){
	$date = new DateTime();
	$date->setDate(2015, 1, 1);
	return $date->format('Y');
}
echo happy()==2015? happy():2015;  

Edit: Var, pats testējot sākumā nepamanīju. :resent:

Labots - MOD
Link to comment
Share on other sites

MarisO lisp kodu var "salauzt" ar ' simbolu:

 

(let ((xx "2015"))
  (if (equal "2015"
       xx)
    '(print
     xx)
    (print "2015"))) 
Labots - bubu
Link to comment
Share on other sites

Baigi riebīgi ir programmēšana un asprātības uzdevums kopā, it sevišķi, ja nevar zināt līdz kādam "līmenim" jāizmanto asprātība.

 

Mans piedāvājums izmantot text to speech vai OCR. Tādējādi iznesot vienkārši izmaināmo vērtību '2015' "citā skoupā".

Ē.. Tas ir - voice recognition nevis t2s

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...