Язык программирования Io
| |
dalikivug | Дата: Среда, 07 Декабря 2016, 23:49 | Сообщение # 21 |
почетный гость
Сейчас нет на сайте
| - Цитата не трогай его, он уже мертв
|
|
| |
sfabrikan | Дата: Четверг, 08 Декабря 2016, 07:44 | Сообщение # 22 |
БЕЗУМЕЦ!!!
Сейчас нет на сайте
| Цитатаcolencor ( ) Но, возникли проблемы с самим Lua - с интерпритатором... какие же?Добавлено (08 декабря 2016, 07:44) ---------------------------------------------
Цитатаdalikivug ( ) не трогай его, он уже мертв Все живо и здарово.
Это я
|
|
| |
colencor | Дата: Четверг, 29 Декабря 2016, 20:33 | Сообщение # 23 |
был не раз
Сейчас нет на сайте
| Python:
Код Rim = ["I", "V", "X", "L", "C", "D", "M"] Q = input("Введите арабское число = ") W = str(Q) R = reversed(W) i = 0; L = []; Re = "" for D in R: i0 = 2*i; i1 = 2*i+1; i2 = 2*i+2 E = int(D); E1 = E - 5 if E == 4: T = Rim[i0] + Rim[i1] elif E == 9: T = Rim[i0] + Rim[i2] elif E1 < 0: T = "" while E > 0: T = T + Rim[i0]; E = E - 1 else: T1 = Rim[i1]; T2 = "" while E1 > 0: T2 = T2 + Rim[i0]; E1 = E1 - 1 T = T1 + T2 i = i+1 L.append(T) L.reverse() for V in L: Re = Re + V print("Rim = ", Re)
Код import re r_a = dict(I=1, V=5, X=10, L=50, C=100, D=500, M=1000) B = input("Введите римскую цифру = ") Q = re.sub("IV", "IIII", B) W = re.sub("IX", "VIIII", Q) E = re.sub("XL", "XXXX", W) R = re.sub("XC", "LXXXX", E) T = re.sub("CD", "CCCC", R) U = re.sub("CM", "DCCCC", T) Rez = 0 for D in U: Rez = Rez + r_a[D] print("Arab = ", Rez) Вроде как, Groovy считается скриптовым языком для платформы Java, интересно как Вы думаете на этот счёт... Также хотелось бы прочесть ответ на мой "любимый" вопрос о присвоении ввода с клавиатуры переменной... А пока так:
Код List Rim = [ "I", "V", "X", "L", "C", "D", "M"] println "Vvedite Arab = "; Arab = "3497"; A = Arab.reverse(); i = 0; l = [] for( v in A){ x = v as Integer; i0 = i*2; i1 = 2*i+1; i2 = 2*i+2 switch (x){ case 4: r = Rim[i0] + Rim[i1]; break case 9: r = Rim[i0] + Rim[i2]; break case 1..3: r = ""; for( int j = 0; j < x; j++){ r = r + Rim[i0]}; break case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[i0]}; r1 = Rim[i1]; r = r1 + r2; break }; ++i; l = l + r} L = l.reverse(); S = L.join(); print "Rim = "; print S
Код Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000] BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) print "Vvedite Rim = " Rim = br.readLine() while( Rim != "n") { f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC") Arab = 0 for(i in f) { Arab = Arab + rim_arab[i]} print "Arab = "; print Arab } Vvedite Rim = Exception thrown
java.io.IOException: Неверный дескриптор
at java.io.FileInputStream.readBytes(Native Method) .................................................................................... Мне непонятно, что с дескриптором...Добавлено (28 декабря 2016, 00:08) --------------------------------------------- Вопрос с самим Lua решён самостоятельно, а вот за код спасибо!
Код r_a = {} r_a["I"] = 1; r_a["V"] = 5; r_a["X"] = 10; r_a["L"] = 50 r_a["C"] = 100; r_a["D"] = 500; r_a["M"] = 1000 repeat print("Введите Rim") Rim = io.read() RimIV = string.gsub(Rim, "IV", "IIII") RimIX = string.gsub(RimIV, "IX", "VIIII") RimXL = string.gsub(RimIX, "XL", "XXXX") RimXC = string.gsub(RimXL, "XC", "LXXXX") RimCD = string.gsub(RimXC, "CD", "CCCC") RimCM = string.gsub(RimCD, "CM", "DCCCC") local W = {} local j = 1 for i in string.gmatch(RimCM, ".") do W[j] = i; j=j+1 end function values (t) local k = 0 return function () k = k + 1; return t[k] end end Rez = 0 for elem in values(W) do Rez = Rez + r_a[elem] end print("Rez = ", Rez) until Rim == "n" Добавлено (29 декабря 2016, 20:33) --------------------------------------------- Работающий код на Groovy:
Код Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000] BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) Rim = "q" while( Rim != "n") { print "Vvedite Rim = " Rim = br.readLine() f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC") Arab = 0 for(i in f) { Arab = Arab + rim_arab[i]} print "Arab = "; println Arab }
litl
|
|
| |
dalikivug | Дата: Пятница, 30 Декабря 2016, 03:37 | Сообщение # 24 |
почетный гость
Сейчас нет на сайте
| На JavaScript
Код const lang = { CM: 900, CD: 400, XC: 90, IX: 9, IV: 4, I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 }
const conv = input => Object.entries(lang).reduce( ([result, input], [rim, arab]) => [ // Берем кол-во вхождений римской цифры и умножаем на её вес, прибавляя к результату result + ((input.split(rim).length - 1) * arab), // Удаляем все вхождения римской цифры input.replace(new RegExp(rim, 'g'), '') ], [0, input] )[0]
Код conv('MCMXCIX') // 1999
// Или если с вводом alert(conv(prompt().toUpperCase()))
Сообщение отредактировал dalikivug - Пятница, 30 Декабря 2016, 03:42 |
|
| |
colencor | Дата: Суббота, 31 Декабря 2016, 08:38 | Сообщение # 25 |
был не раз
Сейчас нет на сайте
| Если Вы не обратили внимание -
Код var c = prompt("Введите римское число :", ""); c = c.replace(/IV/, "IIII").replace(/IX/, "VIIII").replace(/XL/, "XXXX").replace(/XC/, "LXXXX").replace(/CD/, "CCCC").replace(/CM/, "DCCCC"); var v = c.split(""), rez = 0, r_a = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}; for ( var f=0; f < v.length; f++ ) { rez += r_a[v[f]]; }; alert(rez); и ещё -
Код var n = prompt("Введите арабское число :", ""); n = parseInt(n); var rim = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]; var arab = [1000,900,500,400,100,90,50,40,10,9,5,4,1]; var i=0, s=""; while ( n > 0 ) { while (arab[i] <= n) { s += rim[i]; n -= arab[i]; } i++; } alert(s); Добавлено (31 декабря 2016, 08:38) --------------------------------------------- ... и что то я не узнаю родный JS - просветите невежду
litl
|
|
| |
dalikivug | Дата: Суббота, 31 Декабря 2016, 16:25 | Сообщение # 26 |
почетный гость
Сейчас нет на сайте
| Действительно, не заметил, сори)
Это частично ES5 (нов. стандарт) И стандартный Array.reduce
Object.entries берет все поля и их значения Приводя в массив вида [[key,value], [key, value], ...]
Затем по нему мы делаем reduce
|
|
| |
colencor | Дата: Четверг, 30 Ноября 2017, 20:04 | Сообщение # 27 |
был не раз
Сейчас нет на сайте
| Вот код:
Код proc map {lambda list} { set result {} foreach item $list { lappend result [apply $lambda $item] } return $result } set x {a bb ccc dddd eeeee } map {x {return [append x xyz]}} $x #map {x {return [string length $x]:$x}} $x #set x {1 5 10 50 100 500 1000} #map {x {return [expr 2 * $x]}} $x Вопрос знатокам Tcl! Почему если после append стоит $x то получается xyz xyz xyz xyz xyz а если просто x, то тогда axyz bbxyz cccxyz ..., хотя такой результат логичнее при $x, исходя из других примеров...
Добавлено (04 января 2017, 01:24) --------------------------------------------- Lua:
Код rim = {"M", "D", "C", "L", "X", "V", "I"} function dom(a, b) x = (a - math.fmod(a, b))/b return x end function a_r(Arab) local qm = "" d = dom(Arab, 1000) for k = 1, d do qm = qm .. "M" end w = "" for i = 1, 3 do s = dom(math.fmod(Arab, math.pow (10, (4-i))), math.pow (10, (3-i))) i3 = 2*i+1; i2 = 2*i; i1 = 2*i-1; s1 = s-5 if s == 9 then q = rim[i3] .. rim[i1] elseif s == 4 then q = rim[i3] .. rim[i2] elseif 0 < s and s < 4 then q = "" for j = 1, s do q = q .. rim[i3] end elseif 4 < s and s < 9 then q1 = rim[i2]; q2 = "" for j = 1, s1 do q2 = q2 .. rim[i3] end q = q1 .. q2 else q = "" end w = w .. q end return qm, w end repeat print("Введите Arab = ") Arab = io.read() print("Rim = ", a_r(Arab)) until Arab == "n" Другой вариант:
Код rim = {"I", "V", "X", "L", "C", "D", "M"} function a_r(Arab) Bara = Arab:reverse() local U = {}; local j = 1 for i in string.gmatch(Bara, ".") do U[j] = i; j=j+1 end function values (t) local k = 0 return function () k = k + 1; return t[k] end end i = 0; w = {}; l = 1 for t in values(U) do s = t + 0 ii = 2*i+1; iv = 2*i+2; ix = 2*i+3; s1 = s-5 if s == 9 then q = rim[ii] .. rim[ix] elseif s == 4 then q = rim[ii] .. rim[iv] elseif s < 4 then q = "" for j = 1, s do q = q .. rim[ii] end else q1 = rim[iv]; q2 = "" for j = 1, s1 do q2 = q2 .. rim[ii] end q = q1 .. q2 end l = Arab:len() - i w[l] = q i = i + 1 end return table.concat(w) end repeat print("Введите Arab = ") Arab = io.read() print("Rim = ", a_r(Arab)) until Arab == "n"
Добавлено (16 февраля 2017, 01:36) --------------------------------------------- Удобочитаемый код на Groovy:
Код List Rim = [ "I", "V", "X", "L", "C", "D", "M"] BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) while(1) { print "Vvedite Arab = " Arab = br.readLine(); if ( Arab == "n") {break} A = Arab.reverse(); i = 0; L = [] for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2 switch (x){ case 4: r = Rim[iI] + Rim[iV]; break case 9: r = Rim[iI] + Rim[iX]; break case 1..3: r = ""; for( int j = 0; j < x; j++){ r = r + Rim[iI]}; break case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[iI]}; r1 = Rim[iV]; r = r1 + r2; break case 0: r = ""; break }; ++i; L = L + r} S = L.reverse().join(); print "Rim = "; println S }
Добавлено (19 февраля 2017, 00:44) --------------------------------------------- Улучшенная версия Arab_Rim (Tcl):
Код #!/usr/local/bin/wish set a_r {I V X L C D M} while 1 { puts stdout { Vvedite Arab:} set Arab [gets stdin] set Arabn [split $Arab {}] set Zx [string reverse $Arabn] set I 0; set W ""; set W2 "" foreach V $Zx { set I2 [expr 2*$I]; set I1 [expr 2*$I+1] set I3 [expr 2*$I+2]; set V1 [expr $V - 5] if {$V == 4} { append W [lindex $a_r $I1] [lindex $a_r $I2] } elseif {$V == 9} { append W [lindex $a_r $I3] [lindex $a_r $I2] } elseif {$V1 < 0} { for {set J 0} {$J < $V} {incr J} { append W [lindex $a_r $I2] }} else { for {set J 0} {$J < $V1} {incr J} { append W [lindex $a_r $I2] } append W [lindex $a_r $I1] } incr I } set L [string reverse $W] puts stdout "Arab = $Arab ===> Rim = $L" }
Добавлено (04 марта 2017, 23:07) ---------------------------------------------
Код def Vvod () { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) print "Vvedite Rim = "; Rim = br.readLine() } def rimarab (Rim) { Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000] f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC") Arab = 0; for(i in f) { Arab = Arab + rimArab[i]} } def Vivod () { print "Arab = "; println Arab} while (1) { Vvod (); if(Rim == "n") {break} rimarab (Rim) Vivod () }
Добавлено (08 марта 2017, 09:15) ---------------------------------------------
Код def Vvod () {print "Vvedite Rim = "; Rim = System.in.newReader().readLine()}
Добавлено (23 марта 2017, 13:25) --------------------------------------------- Код Groovy и Swing:
Код import groovy.swing.SwingBuilder import javax.swing.JOptionPane def ArabRim (Arab) { List Rim = [ "I", "V", "X", "L", "C", "D", "M"] A = Arab.reverse(); i = 0; L = [] for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2 switch (x){ case 4: r = Rim[iI] + Rim[iV]; break case 9: r = Rim[iI] + Rim[iX]; break case 1..3: r = ""; for( int j = 0; j < x; j++){ r = r + Rim[iI]}; break case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[iI]}; r1 = Rim[iV]; r = r1 + r2; break case 0: r = ""; break }; ++i; L = L + r} S = L.reverse().join(); return S } swing = new SwingBuilder() button = swing.button(text: 'Вычислить', actionPerformed: { JOptionPane.showMessageDialog(frame, ArabRim(message.text)) }) frame = swing.frame(title: 'Арабские в римские'){ panel(){ message = textField(columns: 10) widget(button) }} frame.pack() frame.show()
Код import groovy.swing.SwingBuilder import javax.swing.JOptionPane def RimArab (Rim) { Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000] f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC") Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}; return Arab } swing = new SwingBuilder() button = swing.button(text: 'Вычислить', actionPerformed: { JOptionPane.showMessageDialog(frame, RimArab(message.text)) }) //button1 = swing.button(text: 'Очистить', actionPerformed: {//message.cut()}) // JOptionPane.showMessageDialog(frame, message.cut()) //}) frame = swing.frame(title: 'Римские в арабские'){ panel(){ message = textField(columns: 12) widget(button) // widget(button1) }} frame.pack() frame.show()
Добавлено (03 апреля 2017, 18:43) --------------------------------------------- Извините, смотрите в теме Программирование на Groovy
Добавлено (13 августа 2017, 18:20) --------------------------------------------- Вот мальчики и девочки что получается когда пытаешься забить гвоздь микроскопом (рубанком по моему будет правильнее ) Код на CLIPS:
Код (defrule arab_rim => (bind ?a_r "M" "D" "C" "L" "X" "V" "I") (bind ?R (create$ ?a_r)) (printout t "Vvedite Arab = ") (bind ?Arab (read)) (printout t "Arab = " ?Arab " ==> " "Rim = ") (bind ?Rt (div ?Arab 1000 )) (if (> ?Rt 0) then (loop-for-count ?Rt do (bind ?W "M") (printout t ?W ))) (loop-for-count (?I 0 2) do (bind ?S (div (mod ?Arab (** 10 (- 3 ?I))) (** 10 (- 2 ?I)))) (bind ?Ii (+ (* ?I 2) 3)) (bind ?Vi (+ (* ?I 2) 2)) (bind ?Xi (+ (* ?I 2) 1)) (bind ?S1 (- ?S 5)) (if (= ?S 0) then (bind ?Q "") else (if (= ?S 9) then (bind ?Q (str-cat (nth$ ?Ii ?R) (nth$ ?Xi ?R))) else (if (= ?S 4) then (bind ?Q (str-cat (nth$ ?Ii ?R) (nth$ ?Vi ?R))) else (if (< ?S1 0) then (loop-for-count ?S do (bind ?Q1 (nth$ ?Ii ?R)) (printout t ?Q1) (bind ?Q "")) else (bind ?Q2 (nth$ ?Vi ?R)) (printout t ?Q2) (loop-for-count ?S1 do (bind ?Q3 (nth$ ?Ii ?R)) (printout t ?Q3)) (bind ?Q "") )))) (printout t ?Q)) (printout t crlf)) Добавлено (30 ноября 2017, 20:04) --------------------------------------------- Вы знаете что делает этот код
Код Spisok := method(n, order := list(0); Q := 0 while(Q <= n, J := 0; T := (Number Random value(1, n) round) order foreach(I, if(T != I, J := J + 1)) if(J == order size, order := order append(T)) Q := order size ) order select(order, order > 0) ) input := method(File standardInput readLine) writeln("Press Enter for exit") loop(" N = " print; inp := input; if(inp isNil, break) n := inp asNumber; if(n isNan, break ) W := Spisok(n) writeln( " Spisok = ", W) )
litl
Сообщение отредактировал colencor - Воскресенье, 13 Августа 2017, 18:25 |
|
| |
|